package main

import (
	"fmt"
	"reflect"
)

// 专门演示反射
func reflectTest01(b interface{}) {
	// 通过反射获取到传入的变量的type，kind是什么，具体的值是什么
	// 1. 先获取到reflect.Type类型
	rTyp := reflect.TypeOf(b)
	fmt.Println("rType =", rTyp)
	// 2. 获取reflect.Value类型
	rVal := reflect.ValueOf(b)
	fmt.Println("rVal =", rVal)
	n2 := rVal.Int()

	fmt.Printf("rVal type if %T\n", rVal)
	fmt.Printf("n2 type if %T\n", n2)

	// 将rVal转成interface{}
	iV := rVal.Interface()
	// 将interface通过断言又重新转回需要的类型
	n3 := iV.(int)
	fmt.Printf("n3 type is %T\n", n3)
}


func main() {

	// 请编写一个案例，演示对(基本数据类型、interface{}、reflect.Value)进行反射的基本操作请编写一个案例，演示对(基本数据类型、interface{}、reflect.Value)进行反射的基本操作

	// 1. 定义一个int
	var num int = 100
	reflectTest01(num)


}